package com.myz.rabbitmq.simple;


import com.myz.rabbitmq.utils.ConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * 消息生成者
 *
 * @author maoyz on 18-4-4.
 */
public class SimpleRabbitProducer {

    private static final Logger logger = LoggerFactory.getLogger(SimpleRabbitProducer.class);

    /**
     * 队列名称
     */
    private final static String QUEUE_NAME = "rabbitMQ.test";

    /**
     * queueDeclare()
     * *    第一个参数表示队列名称
     * *    第二个参数为是否持久化队列（true表示是，队列将在服务器重启时生存）
     * *    第三个参数为是否是独占队列（创建者可以使用的私有队列，断开后自动删除）
     * *    第四个参数为消费完成后自动删除队列
     * *    第五个参数为队列的其他参数
     * <p>
     * basicPublish()
     * *    第一个参数为交换机名称
     * *    第二个参数为队列映射的路由key
     * *    第三个参数为消息的其他属性
     * *    第四个参数为发送信息的主体
     */
    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = ConnectionUtils.getConnection();
        //4 创建一个通道
        Channel channel = connection.createChannel();

        //5 声明一个队列
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        String message = "Hello RabbitMQ";

        // 6 发送消息到队列中
        // channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
        channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes(StandardCharsets.UTF_8));

        //7 关闭通道和连接
        channel.close();
        connection.close();
    }
}
